/* $Id: dom.js,v 1.16 2004/09/29 06:50:36 k-narumi Exp $ */
//===========================================================================
// DOM??JavaScript
//
// xml.js???
//
// for Translation
//   000 Your Select:
//   001 SST
//===========================================================================

//===========================================================================
// ??????????
//
// filter: ??????
//===========================================================================
var CAR_TYPE_PREFIX = "รุ่นที่เลือก: "; // 000
var DELIM           = " / ";
function getCarType(filter) {
	var objXml = null;
	if (filter==null) {
		objXml = initXml("pub.xml");
		return getCarTypeFromPub(objXml);
	} else {
		objXml = initXml("../../filter/"+filter.toLowerCase()+".xml", true, true);
		return getCarTypeFromFilter(objXml);
	}
}
// private member
function getCarTypeFromPub(objXml) {
	if (objXml==null) return "";
	objXml.setProperty("SelectionLanguage", "XPath");
	var modelName = objXml.selectSingleNode("//model-name").nodeTypedValue;
	return CAR_TYPE_PREFIX + modelName;
}
// private member
function getCarTypeFromFilter(objXml) {
	var pubXml = initXml("pub.xml");
	if (objXml==null) return getCarTypeFromPub(pubXml);

	objXml.setProperty("SelectionLanguage", "XPath");
	var filterInfo = objXml.selectSingleNode("//filter");
	if (filterInfo==null) return null;
	var tmpName = filterInfo.selectSingleNode("model-name");
	if (tmpName==null) return getCarTypeFromPub(pubXml);

	var carType = new Array();
	var tmpYear = filterInfo.selectSingleNode("model-year");
	var tmpCode = filterInfo.selectSingleNode("model-code");
	var tmpEng  = filterInfo.selectSingleNode("engine");
	var tmpBody = filterInfo.selectSingleNode("body-type")
	if (tmpYear!=null) {
		carType = CAR_TYPE_PREFIX + tmpYear.nodeTypedValue;
		carType += DELIM + tmpName.nodeTypedValue;
	} else {
		carType = CAR_TYPE_PREFIX + tmpName.nodeTypedValue;
	}
	carType += (tmpCode) ? DELIM + tmpCode.nodeTypedValue : "";
	carType += (tmpEng) ? DELIM + tmpEng.nodeTypedValue : "";
	carType += (tmpBody) ? DELIM + tmpBody.nodeTypedValue : "";
	return carType;
}

//===========================================================================
// ?????ID??????????????????
//
// arg0: ?????ID
// arg1: ?????????(????????)     ???: ?????ID.xml
//===========================================================================
function getGroupName() {
	if(arguments==null) return "";

	var paraId = arguments[0];
	var objXml = null;
	if (arguments[1]==null || typeof(arguments[1])=="string") {
		var fileName = (arguments[1]==null)?arguments[0].toLowerCase()+".xml":arguments[1].toLowerCase();
		objXml = initXml(fileName);
	} else {
		objXml = arguments[1]
	}
	if (objXml==null) return "";

	objXml.setProperty("SelectionLanguage", "XPath");
	var sec = objXml.selectSingleNode("//section[descendant::para[@id='"+ paraId +"']]");
	var sct = objXml.selectSingleNode("//servcat[descendant::para[@id='"+ paraId +"']]");
	var dispName = sct.getElementsByTagName("name").item(0).nodeTypedValue;
	if (isNaN(sct.getAttribute("id").substring(0,1))){
		dispName = sec.getElementsByTagName("name").item(0).nodeTypedValue;
	}
	return dispName;
}

//===========================================================================
// ?????????????????????
//
// arg0: ?????ID
// arg1: ?????????(????????)         ???: ?????ID.xml
//===========================================================================
function getSectionName() {
	if(arguments==null) return "";

	var paraId = arguments[0];
	var objXml = null;
	if (arguments[1]==null || typeof(arguments[1])=="string") {
		var fileName = (arguments[1]==null) ? arguments[0].toLowerCase()+".xml" : arguments[1].toLowerCase();
		objXml = initXml(fileName);
	} else {
		objXml = arguments[1];
	}
	if (objXml==null) return "";

	objXml.setProperty("SelectionLanguage", "XPath");
	var sec = objXml.selectSingleNode("//section[descendant::para[@id='"+ paraId +"']]");
	if (sec==null) return "";
	var secName = sec.getElementsByTagName("name").item(0).nodeTypedValue;
	if (secName==null) return;

	return secName;
}

//===========================================================================
// ?????ID???????????????
//
// arg0: ?????ID
// arg1: ?????????(????????)         ???: ?????ID.xml
//===========================================================================
function getTitleName() {
	if(arguments==null) return "";

	var paraId = arguments[0];
	var objXml = null;
	if (arguments[1]==null || typeof(arguments[1])=="string") {
		var fileName = (arguments[1]==null) ? arguments[0].toLowerCase()+".xml" : arguments[1].toLowerCase();
		objXml = initXml(fileName);
	} else {
		objXml = arguments[1];
	}
	if (objXml==null) return "";

	objXml.setProperty("SelectionLanguage", "XPath");
	var ttl = objXml.selectSingleNode("//ttl[para[@id='"+ paraId +"']]");
	if (ttl==null) return "";
	var ttlName = ttl.getElementsByTagName("name").item(0).nodeTypedValue;
	if (ttlName==null) return "";

	return ttlName;
}

//===========================================================================
// ????????????Array???
//
// arg0: ?????ID
// arg1: ???????????  ???: name??
// arg2: ???                  ???: ?????ID.xml
//===========================================================================
function getParagraphNameList() {
	if (arguments==null) return null;

	var paraId = arguments[0];
	var objXml = null;
	if (arguments[2]==null || typeof(arguments[2])=="string") {
		var fileName = (arguments[2]==null) ? arguments[0].toLowerCase()+".xml" : arguments[2].toLowerCase();
		objXml = initXml(fileName);
	} else {
		objXml = arguments[2];
	}
	var name = (arguments[1]==null) ? "name" : arguments[1];
	if (objXml==null) return null;

	objXml.setProperty("SelectionLanguage", "XPath");
	var nameObjList = objXml.selectNodes("//para[@id='"+ paraId +"']/"+name);
	if (nameObjList.length==0) return null;
	var nameArray = new Array();
	for (var i=0; i<nameObjList.length; i++) {
		nameArray.push(nameObjList.item(i).nodeTypedValue);
	}
	return nameArray;
}

//===========================================================================
// ??ID???????????
//
// partsId ??ID
//===========================================================================
function getPartsName(partsId) {
	var objXml = initXml("parts.xml");
	if (objXml==null) return null;
	var parts  = objXml.selectSingleNode("//parts[@id='"+ partsId +"']/name");
	if(parts==null) return null;
	return parts.nodeTypedValue;
}

//===========================================================================
// ?????????????????????????????
//
// tocXml          ????XML
// paraId          ????XML(??XML)
// siblingCategory ????????????
// return          ?? true
//                 ?? false
//===========================================================================
function hasSiblingParagraph(tocXml, paraId, siblingCategory) {
	if (arguments==null || arguments.length!=3) return false;
	tocXml.setProperty("SelectionLanguage", "XPath");
	var ttl = tocXml.selectSingleNode("//ttl[para[@id='"+paraId+"']]");
	if (ttl==null)
		return false;
	var para = ttl.selectNodes("para[@category='"+siblingCategory+"']");
	return (para.length>0);
}

//===========================================================================
// ?????????????????????????????
//
// tocXml          ???XML          
// paraId          ???ID(??, ????)
// siblingCategory ????????????
//==========================================================================
function getSiblingList(paraId, tocXml, siblingCategory) {
	if (arguments==null || arguments.length!=3) return null;
	tocXml.setProperty("SelectionLanguage", "XPath");
	var ttl = tocXml.selectSingleNode("//ttl[para[@id='"+paraId+"']]");
	if (ttl==null) return null;
	var sibs = ttl.selectNodes("child::para[@category='"+siblingCategory+"' and @id!='"+paraId+"']");
	return sibs;
}

//===========================================================================
// ????????????????XML???????Array???
//
// objXml   ?????XML??????
// tocXml   ????XML??????
//===========================================================================
var SST_PARANAME = "SST";	// 001
var sctPprList = null;
function getPreparationArray(objXml, tocXml) {
	if (objXml==null || tocXml==null) return null;
	objXml.setProperty("SelectionLanguage", "XPath");
	tocXml.setProperty("SelectionLanguage", "XPath");
	var paraId = objXml.selectSingleNode("//para/@id").nodeValue;
	var pprXml = initXml("ppr_"+paraId.toLowerCase()+".xml", false, false);
	if (sctPprList==null) {
		var sctName = objXml.selectSingleNode("//section/name").nodeTypedValue;
		sctPprList = tocXml.selectNodes("//ttl[name=\""+sctName+"\"]/para[@category='B']");
	}
	if(pprXml==null && sctPprList.length==0) return null;

	var retArray = new Array();
	if(pprXml!=null) retArray.push(pprXml);
	for (var i=0; i<sctPprList.length; i++) {
		var pprPara = sctPprList.item(i);
		var paraName = pprPara.selectSingleNode("name").nodeTypedValue;
		if (paraName==SST_PARANAME) continue;
		var paraId = pprPara.selectSingleNode("@id").nodeValue;
		var para = initXml(paraId.toLowerCase()+".xml", false, false);
		if (para==null) continue;
		retArray.push(para);
	}
	return (retArray.length==0) ? null : retArray;
}

//===========================================================================
// ????????????TipsXML?????????
//
// objXml   ?????XML??????
//===========================================================================
function getTips(objXml) {
	var tipsXml=null;
	if (objXml==null) return null;

	objXml.setProperty("SelectionLanguage", "XPath");
	var paraId = objXml.selectSingleNode("//para/@id").nodeValue;
	tipsXml = initXml("../../tips/"+paraId.toLowerCase()+".xml", true, false);
	return tipsXml;
}

//===========================================================================
// ?????ID???????????????(?????)????ID?
// ??????
//
// paraId   ?????ID
//===========================================================================
function getIllustIdList(paraId) {
	if (paraId==null) return null;
	var fileName = "components.xml";
	var objXml = initXml(fileName);
	var illustNodes = objXml.selectNodes("//para[@id='"+ paraId +"']//illust");
	var illustIds = new Array();
	for (var i=0; i<illustNodes.length; i++) {
		var id = illustNodes.item(i).getAttribute("id");
		illustIds.push(id);
	}
	return illustIds;
}

//===========================================================================
// ??????????????????????????????
//
// bparaId   ??????????????????ID
// illustId  ?????????????????ID
// termId    ??
// vin       VIN No
// filter    ???????
// ttlId     ???????????????????ID
// tocXmlObj ????XML
//===========================================================================
function getCttLink(bparaId, illustId, termId, vin, filter, ttlId, tocXmlObj) {
	if (tocXmlObj==null) return null;
	var ttlItem = tocXmlObj.selectSingleNode("//ttl[@id='"+ ttlId +"']");
	if (ttlItem == null) return null;
	var secItem = ttlItem.parentNode;
	var idx = findParameterValue("idx", parent.location.search, location.search);
	var lik = "?section="+secItem.getAttribute("id")
					+ "&ttl=" + ttlItem.getAttribute("id")
					+ "&illust=" + illustId
					+ ((termId!=null) ? "&term=" + termId : "")
					+ ((vin!=null) ? "&vin=" + vin : "")
					+ ((filter!=null) ? "&filter=" + filter : "")
					+ ((bparaId!=null) ? "&bp=" + bparaId : "")
					+ ((idx!=null) ? "&bi=" + idx : "");
	return lik;
}